/* ====================================================================
 * 作者-------  支叶认知
 * 创作时间---  20251001
 * 功能-------  第三方接口扩展接口（在ThirdBasics.c 的基础封装更为直观易使用的接口）
 * 运行环境---  长沙思知所提供的自然语运行环境
 */
//====================================================================
#include "ThirdBasics.h"

//==================元素操作接口封装========================================
inline void sz_ensure_unit(ExpUnit*& sz_unit) {
	if(sz_unit)
		sz_clean_unit_data(sz_unit);
	else
		sz_unit = sz_create_unit();
}

void sz_set_unit_bool(ExpUnit*& sz_unit, int result) {
	sz_ensure_unit(sz_unit);
	sz_unit->type = TYPE_NUM;
	sz_unit->tval = NUM_BOOL;
	sz_unit->Result = result;
}

void sz_set_unit_int(ExpUnit*& sz_unit, intptr_t val) {
	sz_ensure_unit(sz_unit);
	sz_unit->type = TYPE_NUM;
	sz_unit->tval = NUM_INT;
	sz_unit->iVal = val;
}

void sz_set_unit_num(ExpUnit*& sz_unit,number_t num) {
	sz_ensure_unit(sz_unit);
	sz_unit->type = TYPE_NUM;
	sz_unit->tval = NUM_NUM;
	sz_unit->iNum = num;
}

void sz_set_unit_ptr(ExpUnit*& sz_unit, void* p) {
	sz_ensure_unit(sz_unit);
	sz_unit->type = TYPE_NUM;
	sz_unit->tval = NUM_POI;
	sz_unit->uPit = p;
}

DataBufStr * sz_get_dbs(const void *buf, size_t len) {
	DataBufStr *pData = (DataBufStr *)sz_malloc(sizeof(DataBufStr) + len + 1);
	if (buf) memcpy(pData->pBuf, buf, len);
	pData->pBuf[len] = 0;
	pData->Len = len;
	return pData;
}

void sz_free_dbs(DataBufStr *pBfS) {
	sz_free(pBfS);
}
//---------------执行后dbs 不需再释放----------------------------
void sz_take_unit_dbs(ExpUnit* &sz_unit, int tval, DataBufStr *dbs) {
	sz_ensure_unit(sz_unit);
	if (dbs) {
		sz_unit->type = TYPE_DATA;
		sz_unit->tval = tval;
		sz_unit->pBfS = dbs;
	}
	else { //dbs 为空时，返回FALSE
		sz_unit->type = TYPE_NUM;
		sz_unit->tval = NUM_BOOL;
		sz_unit->Result = FALSE;
	}
}

